#ifndef MONITOR_SETTINGS_H
#define MONITOR_SETTINGS_H

#include <QWidget>
#include <QSettings>
#include <QCheckBox>
#include <QVBoxLayout>
#include <kwidget.h>
#include <kaboutdialog.h>
#include <QSlider>
#include <QSpinBox>
#include <QColorDialog>
#include <QPushButton>
#include <kborderbutton.h>
#include <QComboBox>
#include <cpumonitor.h>

/**
 * @brief 监视器设置
 */
class MonitorSettings : public kdk::KWidget
{
    Q_OBJECT

public:
    MonitorSettings(QWidget *parent = nullptr);
    ~MonitorSettings();

    /**
     * @brief 加载设置
     */
    void loadSettings();

    /**
     * @brief 保存设置
     */
    void saveSettings();

    /**
     * @brief CPU占用率是否显示
     * @return
     */
    bool isCpuUsageVisible() const;

    /**
     * @brief CPU频率是否显示
     * @return
     */
    bool isCpuFreqVisible() const;

    /**
     * @brief CPU频率显示模式
     * @return
     */
    int getCpuFreqVisibleType() const;

    /**
     * @brief CPU频率显示单位
     * @return
     */
    CpuMonitor::FreqUnit getCpuFreqVisibleUnit() const;

    /**
     * @brief 内存占用率是否显示
     * @return
     */
    bool isMemUsageVisible() const;

    /**
     * @brief GPU核心占用率是否显示
     * @return
     */
    bool isGpuCoreUsageVisible() const;

    /**
     * @brief GPU显存占用率是否显示
     * @return
     */
    bool isGpuMemUsageVisible() const;

    /**
     * @brief GPU核心温度是否显示
     */
    bool isGpuCoreTempVisible() const;

    /**
     * @brief 获取字体大小
     * @return
     */
    int getFontSize() const;

    /**
     * @brief 获取字体颜色
     * @return
     */
    QColor getFontColor() const;

    /**
     * @brief 获取背景颜色
     */
    QColor getBgColor() const;

signals:
    /**
     * @brief 显示状态改变
     */
    void visibilityChanged();

    /**
     * @brief 字体大小改变
     */
    void fontSizeChanged();

    /**
     * @brief 字体颜色改变
     */
    void fontColorChanged();

    /**
     * @brief 背景颜色改变
     */
    void bgColorChanged();

    /**
     * @brief CPU频率单位改变
     */
    void cpuFreqUnitChanged();

private:
    void createOptions();

    void createResetButton();

    void createAboutInfo();

    /**
     * @brief 创建关于对话框
     */
    kdk::KAboutDialog* createAboutDialog();

    QCheckBox *cpuCheckBox;
    QCheckBox *cpuFreqCheckBox;
    QComboBox *cpuShowTypeComboBox;
    QComboBox *cpuShowUnitComboBox;
    QCheckBox *memCheckBox;
    QCheckBox *gpuCoreCheckBox;
    QCheckBox *gpuMemCheckBox;
    QCheckBox *gpuCoreTempCheckBox;

    QLabel *fontSizeLabel;
    QSlider *fontSizeSlider;
    QSpinBox *fontSizeSpinBox;

    /**
     * @brief 字体颜色16进制值
     */
    QString fontColor;
    QLabel *fontColorLabel;
    QWidget *fontColorPreviewWidget;
    kdk::KBorderButton *fontColorSelectButton;
    QColorDialog *fontColorDialog;

    QString bgColor;
    QLabel *bgColorLabel;
    QWidget *bgColorPreviewWidget;
    kdk::KBorderButton *bgColorSelectButton;
    QColorDialog *bgColorDialog;
    

    QVBoxLayout *layout;

    /**
     * @brief 设置
     */
    QSettings settings;

    /**
     * @brief 关于对话框
     */
    kdk::KAboutDialog* aboutDialogue;


private slots:
    void resetAllSettings();


};

#endif // MONITOR_SETTINGS_H
